class Solution {
public:
    int getCnt(const string& str,int flg){

        int nCnt=0;
        for(int i=0;i<str.size();++i){
            if(str[i]==flg+'0'){
                ++nCnt;
            }
        }

        return nCnt;
    }
    int findMaxForm(vector<string>& strs, int m, int n) {
        
        int len=strs.size();
        vector<vector<int>> dp(m+1,vector<int>(n+1));
        vector<int> zero(len),one(len);
        for(int i=0;i<len;++i){
            zero[i]=getCnt(strs[i],0);
            one[i]=getCnt(strs[i],1);
        }
        for(int i=0;i<len;++i){
            for(int j=m;j>=zero[i];--j){
                for(int k=n;k>=one[i];--k){
                    dp[j][k]=max(dp[j][k],dp[j-zero[i]][k-one[i]]+1);
                }
            }
        }
        return dp[m][n];
    }
};
